perm filename DRIVE.FAI[SYS,HE]1 blob
sn#004252 filedate 1972-09-19 generic text, type T, neo UTF8
00100 TITLE DRIVE
00200 INTERNAL DOIT,ARMPOS,ARM.JOINT,PACK
00300 INTERNAL HANDFN,ARMFN,ARMPROCEED
00400 EXTERNAL ARM.VECTOR,ARM.MOTION,ARM.STATUS,ARM.SEG
00500 EXTERNAL ARM.WAIT,FELT,STOP.ON,ARM.TO
00600 EXTERNAL JOBAPR,UNDERF
00700 EXTERNAL ARM.MESSAGE
00800
00900 P←17
01000 MASTER←←16657
01100 RELOC←←40
01200 TOUCH←←10
01300 HOLD←←20
01400 ARM.JOINT:MOVEI
01500 SKIPA
01600 ARMPOS: MOVEI 1
01700 MOVE 1,ARM.VECTOR
01800 MOVEM 1,THETA
01900 MOVE 1,ARM.TO
02000 MOVEM 1,ETOR
02100 MOVE 1,FELT
02200 MOVEM 1,NERVES
02300 CALLI 1,30
02400 HRRM 1,SEGJOB
02500 CALLI 1,400021
02600 HRLM 1,SEGJOB
02700 MOVEI 1,ARM.STATUS
02800 MOVEM 1,STATUS
02900 MOVEI 1,ARM.SEG
03000 MOVEM 1,SEGMENT
03100 MOVEI 1,ARM.MOTION
03200 HRRM 1,NAME
03300 MOVEI 1,ARM.WAIT
03400 HRLM 1,NAME
03500 SEN2: JSR ISSERV
03600 PUSHJ P,ACT
03700 RETN: POPJ 17,
03800
03900 DOIT: MOVE 1,-1(17)
04000 MOVEM 1,FILE
04100 MOVEM 1,ARM.WAIT
04200 MOVE 1,-2(17)
04300 HRRZM 1,BAND
04400 MOVEI 2
04500 SETZ 1,
04600 CALLI 1,24
04700 MOVEM 1,PPPN
04800 JSR ISSERV
04900 SEN1: PUSHJ P,ACT
05000 RETM: SUB 17,[XWD 3,3]
05100 JRST @3(17)
05200
05300 ARMFN: MOVEI 3+HOLD+RELOC
05400 HRL 1,ARM.ME
05500 HRRI 1,ARGS
05600 BLT 1,ARGS+24
05700 MOVE 1,-1(17)
05800 DPB 1,[POINT 9,0,26]
05900 PUSHJ P,ACT
06000 SUB P,[XWD 2,2]
06100 JRST @2(P)
06200
06300 HANDFN: MOVEI 3+HOLD
06400 MOVE 1,ARM.ME
06500 MOVE 1,(1)
06600 MOVEM 1,ARGS
06700 JRST ACT
06800
06900 ARMPRO: MOVEI 3
07000 JRST ACT
07100
07200
07300 REQU: SIXBIT/$ARM$/
07400 EXE
07500
00100 PACK: ;(INTEGER PTR,TIME;REFERENCE REAL SOLN);
00200 MOVE 10,-3(P)
00300 MOVE 1,-2(P)
00400 MOVEM 1,(10) ;TIME
00500 HRLZ 5,-1(P)
00600 BLT 5,4 ;PICK UP A0-A4
00700 MOVM 6,4 ;WHERE THE LARGEST WILL END UP
00800 MOVEI 5,3
00900 L1: MOVM 7,(5)
01000 CAMGE 6,7
01100 MOVE 6,7
01200 SOJGE 5,L1
01300 TDZ 6,[XWD 777,777777] ;THE LARGEST IS NOW IN 6
01400 ADD 6,[XWD 12000,0] ;THE EXPONENT TO PUT FRACTION AND SIGN INTO RT. HALF
01500 HLLM 6,-1(10)
01600 UFA 6,4
01700 HRLM 7,-3(10)
01800 UFA 6,3
01900 HRRM 7,-3(10)
02000 UFA 6,2
02100 HRLM 7,-2(10)
02200 UFA 6,1
02300 HRRM 7,-2(10)
02400 UFA 6,0
02500 HRRM 7,-1(10)
02600 SUB P,[XWD 4,4]
02700 JRST @4(P)
02800
00100 ACT: HRLI MASTER
00200 SETZM ARM.STATUS
00300 SKIPE STOP.ON
00400 TRO TOUCH
00500 MOVEM EXE
00600 MOVE 1,ARM.WAIT
00700 MOVEM 1,ARM.MOTION
00800 SETZM ARM.WAIT
00900 CALL 1,[SIXBIT/INTENS/]
01000 MOVEM 1,ENBSAV#
01100 SETZ 1,
01200 CALL 1,[SIXBIT/INTENB/] ;TURN OFF INTERRUPTS
01300 MOVE 1,JOBAPR
01400 MOVEM 1,APRSAV#
01500 MOVEI 1,[CALL[SIXBIT/DISMIS/]]
01600 MOVEM 1,JOBAPR
01700 SEND REQU
01800 JRST[ MOVEI 1,2
01900 CALLI 1,31
02000 JRST .-1]
02100 HRLZI 1,40
02200 CALL 1,[SIXBIT/IENBW/]
02300 MOVE 1,APRSAV
02400 MOVEM 1,JOBAPR
02500 MOVE 1,ENBSAV
02600 CALL 1,[SIXBIT/INTENB/]
02700 POPJ P,
02800
00100 ; THIS IS THE 32 WORD MAIL MESSAGE
00200
00300 EXE: XWD MASTER,0 ;18-27 NARGS, 30 RELOC, 31 HOLD, 32 SOTCH, 33-35 EXE
00400 ;0 READ IN OCTAL
00500 ;1 READ IN DECIMAL
00600 ;2 EXECUTE FILE
00700 ;3 EXECUTE FUNCTION
00800 FILE: 0
00900 PPPN: 0
01000 BAND: 0
01100 SEGJOB: 0
01200 NAME: 0
01300 STATUS: 0
01400 SEGMENT:0
01500 NERVES: 0
01600 ETOR: 0
01700 THETA: 0
01800 ARGS: BLOCK =21
01900
00100 ISSERV: 0
00200 SEE: MOVE 1,[SIXBIT/$ARM$/]
00300 CALLI 1,400043
00400 JRST[ CAIE 1,1
00500 JRST[ OUTSTR[ASCIZ/THERE ARE TOO MANY SERVOS ALREADY
00600 PLEASE KILL THEM ALL BUT ONE AND TYPE RET
00700 /]
00800 INCHWL
00900 INCHWL
01000 JRST SEE]
01100 PTYGET 10
01200 JRST[ OUTSTR[ASCIZ/NO PTYS AVAILABLE
01300 /]
01400 CALLI 12]
01500 HRLI 10,0
01600 MOVEI 11,[ASCIZ/L
01700 /]
01800 PTWRS7 10
01900 WH: PTRD1W 10
02000 CAIE 11,"#"
02100 JRST WH
02200 MOVEI 11,[ASCIZ/SYS,HE
02300 /]
02400 PTWRS7 10
02500 WCC: PTRD1W 10
02600 CAIE 11,"↑"
02700 JRST WCC
02800 MOVEI 11,[ASCIZ/RUN ARM
02900 /]
03000 PTWRS7 10
03100 WCC2: PTRD1W 10
03200 CAIE 11,"!"
03300 JRST WCC2
03400 JRST @ISSERV]
03500 GOTONE: JRST @ISSERV
03600
03700 END